package cn.tedu.justone.pack02;

/**
 * ZZ：JustOne
 * VX：Andylau2020smile
 * DY：JustOne2018
 * ZT：《》
 */
public class Demo18_方法示例_interrupt如何影非阻塞线程 {

    public static void main(String[] args) {
        //
        //interrupt如何影非阻塞线程
        //interrupt如何影非阻塞线程
        //interrupt如何影非阻塞线程
        // 对于非阻塞线程t而言，t.interrupt()只是为t做了中断标记，
        // t该运行还是运行。如果我们想让t线程在中断后马上就改变行为，
        // 可以使用本例的方案。


        //相关方法：
        // 1, t.interrupt();中断t线程的阻塞
        // 2, t.isInterrupted(); 获取t线程是否有被求标记中断
        // 3, t.interrupted(); 获取执行该代码的线程是否有被求标记中断，并清除标记，与t无关

        Thread you = new Thread(){
            @Override
            public void run() {
                int i = 1;
                //如果被标记了中断，就不再执行了
                //也可以在for循环中加if判断来break
                while ( !(this.interrupted()) ) {
                    if(i%500000==0){
                        System.out.println("You：努力搬砖中");
                    }
                    i++;
                }
                System.out.println("You：砖搬完了");

            }
        };
        you.start();

        System.out.println("---You线程是否被标记中断：" + you.isInterrupted());
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        you.interrupt();
        System.out.println("---You线程是否被标记中断：" + you.isInterrupted());

    }
}
